fix(sdk): inline iobuf into iggy_binary_protocol#3110
Merged
Conversation
spetz
previously approved these changes
Apr 13, 2026
numinnex
previously approved these changes
Apr 13, 2026
krishvishal
approved these changes
Apr 13, 2026
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #3110 +/- ##
=========================================
Coverage 72.76% 72.76%
Complexity 943 943
=========================================
Files 1117 1117
Lines 96342 96343 +1
Branches 73542 73561 +19
=========================================
+ Hits 70102 70105 +3
+ Misses 23692 23674 -18
- Partials 2548 2564 +16
🚀 New features to boost your workflow:
|
0.8.0 rc1 passed both PPMC and IPMC votes, then cargo publish revealed the iobuf crate could not reach crates.io: the name "iobuf" is already owned by an unrelated v5.8.1 crate, so adding a version field would have turned any downstream `cargo add iggy_common` into a supply-chain hazard resolving the foreign crate transitively. Publishing the workspace copy under a new name (iggy_iobuf) was rejected because it would commit the project to SemVer stability on ~485 LoC of refcounted unsafe code with zero tests, zero docs, and a latent refcount-underflow UAF masked by debug_assert!. Move core/iobuf/src/lib.rs verbatim into core/binary_protocol/src/consensus/iobuf.rs, delete the standalone crate, and update every consumer to import through iggy_binary_protocol::consensus::iobuf. The implementation is byte-for-byte unchanged; the existing lint debt is suppressed at the module declaration and tracked for a 0.9.x cleanup pass. Also close the SemVer leak: iobuf types were reachable through iggy_common's public API via FrozenBatchHeader and a `pub use send_messages2::*` wildcard re-export. Demote FrozenBatchHeader to pub(crate), drop the wildcard (no external consumers relied on it), and seal FragmentedBacking so downstream crates cannot implement it and pull Frozen<MESSAGE_ALIGN> into their own signatures. The publish chain drops from 5 crates to 4: iggy_binary_protocol -> iggy_common -> iggy -> iggy-cli.
…onent paste -sd ' | ' treats the delimiter argument as a list of single characters to cycle through (space, pipe, space), producing alternating separators instead of the intended ' | ' between every package. The result was expressions like `package(a) package(b)|package(c)` which nextest rejects with "expected end of expression" (exit 94). Fix by joining with a single '|' delimiter then substituting with ' | ' via sed, which produces valid filterset syntax throughout. The rust-iobuf component is removed from components.yml - iobuf was inlined into iggy_binary_protocol in the preceding commit, so the path and all depends_on references are stale.
numinnex
approved these changes
Apr 13, 2026
mmodzelewski
approved these changes
Apr 13, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
0.8.0 rc1 passed both PPMC and IPMC votes, then cargo publish
revealed the iobuf crate could not reach crates.io: the name
"iobuf" is already owned by an unrelated v5.8.1 crate.
Publishing the workspace copy under a new name (iggy_iobuf) was
rejected because it would commit the project to SemVer stability
on ~485 LoC of refcounted unsafe code with zero tests, zero docs,
and a latent refcount-underflow UAF masked by debug_assert!.
Move core/iobuf/src/lib.rs verbatim into
core/binary_protocol/src/consensus/iobuf.rs, delete the standalone
crate, and update every consumer to import through
iggy_binary_protocol::consensus::iobuf. The implementation is
byte-for-byte unchanged; the existing lint debt is suppressed at
the module declaration and tracked for a 0.9.x cleanup pass.
Also close the SemVer leak:
iobuf types were reachable through iggy_common's public API via
FrozenBatchHeader and a
pub use send_messages2::*wildcardre-export. Demote FrozenBatchHeader to pub(crate), drop the
wildcard (no external consumers relied on it), and seal
FragmentedBacking so downstream crates cannot implement it and
pull Frozen<MESSAGE_ALIGN> into their own signatures.
The publish chain drops from 5 crates to 4:
iggy_binary_protocol -> iggy_common -> iggy -> iggy-cli.